package com.database.bean;

import javax.persistence.AttributeOverride;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name="SETTING")
@AttributeOverride( name="id", column = @Column(name="id") )
@XmlRootElement
public class Setting extends BaseBean {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//how many products are able to provide 
	//without extra portfolio costs
	@Column(name="maxFreePortfolioProducts")
	private Integer maxFreePortfolioProducts=null;
	
	//what are the additional costs for too much products
	@Column(name="portfolioExtraCostsPerProduct")
	private Double portfolioExtraCostsPerProduct=null;

	//start game image of companies
	@Column(name="startImageForCompanies")
	private Double startImageForCompanies=null;
	
	//interest rate for overplus costs
	@Column(name="interestRate")
	private Double interestRate=null;
	
	//if the utility is under this level
	//then agent do not buy the product
	@Column(name="minimumConsumerUtility")
	private Double minimumConsumerUtility=null;
	
	//game start budget for all companies
	@Column(name="startBudgetForCompanies")
	private Double startBudgetForCompanies=null;
	
	//how much influence have the marketing investments  
	//to the image
	@Column(name="factorMarketing")
	private Double factorMarketing=null;
	
	//how much influence have the personal investments  
	//to the image
	@Column(name="factorPersonal")
	private Double factorPersonal=null;
	
	//how much influence have the RD investments  
	//to the image
	@Column(name="factorRD")
	private Double factorRD=null;
	
	//how much influence has the market share 
	//to the image
	@Column(name="factorMarketShare")
	private Double factorMarketShare=null;
	
	//variance for the agent preference calculation
	@Column(name="preferenceVariance")
	private Double preferenceVariance=null;
	
	//for the portfolio costs calculation
	@Column(name="portfolioFactor")
	private Double portfolioFactor=null;
	
	//important for the image calculation 
	//to consider the past
	@Column(name="exponentialSmoothingFactor")
	private Double exponentialSmoothingFactor=null;
	
	//this factor multiplied with the amount of companies results in 
	//the amount of agents per round
	@Column(name="agentAmountCompanyFactor")
	private Double agentAmountCompanyFactor=null;
	
	//trade margin which the companies usually calculate for their products
	@Column(name="tradeMargin")
	private Double tradeMargin=null;
	
	//percentage for initial costs of marketing
	@Column(name="factorCostMarketing")
	private Double factorCostMarketing=null;
	
	//percentage for initial costs of RD
	@Column(name="factorCostRD")
	private Double factorCostRD=null;
	
	//percentage for initial costs of personal
	@Column(name="factorCostPersonal")
	private Double factorCostPersonal=null;
	
	
	//maximum costs of marketing
	@Column(name="maxCostsMarketing")
	private Double maxCostsMarketing=null;
		
	//maximum costs of RD
	@Column(name="maxCostsRD")
	private Double maxCostsRD=null;
		
	//maximum costs of personal
	@Column(name="maxCostsPersonal")
	private Double maxCostsPersonal=null;
	
	//percentage for initial small report
	@Column(name="factorReportSmall")
	private Double factorReportSmall=null;
	
	//percentage for initial middle report
	@Column(name="factorReportMiddle")
	private Double factorReportMiddle=null;
	
	//percentage for initial big report
	@Column(name="factorReportBig")
	private Double factorReportBig=null;
	
	//percentage for initial spy report
	@Column(name="factorReportSpy")
	private Double factorReportSpy=null;
	
	//percentage for initial logistic costs
	@Column(name="factorLogisticCosts")
	private Double factorLogisticCosts=null;
	
	//percentage for initial start budget
	@Column(name="factorStartBudget")
	private Double factorStartBudget=null;
	
	//percentage for initial start budget
	@Column(name="utilityPrecision")
	private Double utilityPrecision=null;
	
	
	public Setting(){
		super();
	}

	public Integer getMaxFreePortfolioProducts() {
		return maxFreePortfolioProducts;
	}

	public void setMaxFreePortfolioProducts(Integer maxFreePortfolioProducts) {
		this.maxFreePortfolioProducts = maxFreePortfolioProducts;
	}

	public Double getPortfolioExtraCostsPerProduct() {
		return portfolioExtraCostsPerProduct;
	}

	public void setPortfolioExtraCostsPerProduct(
			Double portfolioExtraCostsPerProduct) {
		this.portfolioExtraCostsPerProduct = portfolioExtraCostsPerProduct;
	}

	public Double getStartImageForCompanies() {
		return startImageForCompanies;
	}

	public void setStartImageForCompanies(Double startImageForCompanies) {
		this.startImageForCompanies = startImageForCompanies;
	}
	
	public Double getInterestRate() {
		return interestRate;
	}

	public void setInterestRate(Double interestRate) {
		this.interestRate = interestRate;
	}

	public Double getMinimumConsumerUtility() {
		return minimumConsumerUtility;
	}

	public void setMinimumConsumerUtility(Double minimumConsumerUtility) {
		this.minimumConsumerUtility = minimumConsumerUtility;
	}

	/**
	 * @return the startBudgetForCompanies
	 */
	public Double getStartBudgetForCompanies() {
		return startBudgetForCompanies;
	}

	/**
	 * @param startBudgetForCompanies the startBudgetForCompanies to set
	 */
	public void setStartBudgetForCompanies(Double startBudgetForCompanies) {
		this.startBudgetForCompanies = startBudgetForCompanies;
	}

	/**
	 * @return the factorMarketing
	 */
	public Double getFactorMarketing() {
		return factorMarketing;
	}

	/**
	 * @param factorMarketing the factorMarketing to set
	 */
	public void setFactorMarketing(Double factorMarketing) {
		this.factorMarketing = factorMarketing;
	}

	/**
	 * @return the factorPersonal
	 */
	public Double getFactorPersonal() {
		return factorPersonal;
	}

	/**
	 * @param factorPersonal the factorPersonal to set
	 */
	public void setFactorPersonal(Double factorPersonal) {
		this.factorPersonal = factorPersonal;
	}

	/**
	 * @return the factorRD
	 */
	public Double getFactorRD() {
		return factorRD;
	}

	/**
	 * @param factorRD the factorRD to set
	 */
	public void setFactorRD(Double factorRD) {
		this.factorRD = factorRD;
	}

	/**
	 * @return the factorMarketShare
	 */
	public Double getFactorMarketShare() {
		return factorMarketShare;
	}

	/**
	 * @param factorMarketShare the factorMarketShare to set
	 */
	public void setFactorMarketShare(Double factorMarketShare) {
		this.factorMarketShare = factorMarketShare;
	}

	public Double getPreferenceVariance() {
		return preferenceVariance;
	}

	public void setPreferenceVariance(Double preferenceVariance) {
		this.preferenceVariance = preferenceVariance;
	}

	public Double getPortfolioFactor() {
		return portfolioFactor;
	}

	public void setPortfolioFactor(Double portfolioFactor) {
		this.portfolioFactor = portfolioFactor;
	}

	public Double getExponentialSmoothingFactor() {
		return exponentialSmoothingFactor;
	}

	public void setExponentialSmoothingFactor(Double exponentialSmoothingFactor) {
		this.exponentialSmoothingFactor = exponentialSmoothingFactor;
	}

	public Double getAgentAmountCompanyFactor() {
		return agentAmountCompanyFactor;
	}

	public void setAgentAmountCompanyFactor(Double agentAmountCompanyFactor) {
		this.agentAmountCompanyFactor = agentAmountCompanyFactor;
	}

	/**
	 * @return the tradeMargin
	 */
	public Double getTradeMargin() {
		return tradeMargin;
	}

	/**
	 * @param tradeMargin the tradeMargin to set
	 */
	public void setTradeMargin(Double tradeMargin) {
		this.tradeMargin = tradeMargin;
	}

	/**
	 * @return the factorCostMarketing
	 */
	public Double getFactorCostMarketing() {
		return factorCostMarketing;
	}

	/**
	 * @param factorCostMarketing the factorCostMarketing to set
	 */
	public void setFactorCostMarketing(Double factorCostMarketing) {
		this.factorCostMarketing = factorCostMarketing;
	}

	/**
	 * @return the factorCostRD
	 */
	public Double getFactorCostRD() {
		return factorCostRD;
	}

	/**
	 * @param factorCostRD the factorCostRD to set
	 */
	public void setFactorCostRD(Double factorCostRD) {
		this.factorCostRD = factorCostRD;
	}

	/**
	 * @return the factorCostPersonal
	 */
	public Double getFactorCostPersonal() {
		return factorCostPersonal;
	}

	/**
	 * @param factorCostPersonal the factorCostPersonal to set
	 */
	public void setFactorCostPersonal(Double factorCostPersonal) {
		this.factorCostPersonal = factorCostPersonal;
	}

	/**
	 * @return the factorReportSmall
	 */
	public Double getFactorReportSmall() {
		return factorReportSmall;
	}

	/**
	 * @param factorReportSmall the factorReportSmall to set
	 */
	public void setFactorReportSmall(Double factorReportSmall) {
		this.factorReportSmall = factorReportSmall;
	}

	/**
	 * @return the factorReportMiddle
	 */
	public Double getFactorReportMiddle() {
		return factorReportMiddle;
	}

	/**
	 * @param factorReportMiddle the factorReportMiddle to set
	 */
	public void setFactorReportMiddle(Double factorReportMiddle) {
		this.factorReportMiddle = factorReportMiddle;
	}

	/**
	 * @return the factorReportBig
	 */
	public Double getFactorReportBig() {
		return factorReportBig;
	}

	/**
	 * @param factorReportBig the factorReportBig to set
	 */
	public void setFactorReportBig(Double factorReportBig) {
		this.factorReportBig = factorReportBig;
	}

	/**
	 * @return the factorReportSpy
	 */
	public Double getFactorReportSpy() {
		return factorReportSpy;
	}

	/**
	 * @param factorReportSpy the factorReportSpy to set
	 */
	public void setFactorReportSpy(Double factorReportSpy) {
		this.factorReportSpy = factorReportSpy;
	}

	/**
	 * @return the factorLogisticCosts
	 */
	public Double getFactorLogisticCosts() {
		return factorLogisticCosts;
	}

	/**
	 * @param factorLogisticCosts the factorLogisticCosts to set
	 */
	public void setFactorLogisticCosts(Double factorLogisticCosts) {
		this.factorLogisticCosts = factorLogisticCosts;
	}

	/**
	 * @return the factorStartBudget
	 */
	public Double getFactorStartBudget() {
		return factorStartBudget;
	}

	/**
	 * @param factorStartBudget the factorStartBudget to set
	 */
	public void setFactorStartBudget(Double factorStartBudget) {
		this.factorStartBudget = factorStartBudget;
	}

	/**
	 * @return the maxCostsMarketing
	 */
	public Double getMaxCostsMarketing() {
		return maxCostsMarketing;
	}

	/**
	 * @param maxCostsMarketing the maxCostsMarketing to set
	 */
	public void setMaxCostsMarketing(Double maxCostsMarketing) {
		this.maxCostsMarketing = maxCostsMarketing;
	}

	/**
	 * @return the maxCostsRD
	 */
	public Double getMaxCostsRD() {
		return maxCostsRD;
	}

	/**
	 * @param maxCostsRD the maxCostsRD to set
	 */
	public void setMaxCostsRD(Double maxCostsRD) {
		this.maxCostsRD = maxCostsRD;
	}

	/**
	 * @return the maxCostsPersonal
	 */
	public Double getMaxCostsPersonal() {
		return maxCostsPersonal;
	}

	/**
	 * @param maxCostsPersonal the maxCostsPersonal to set
	 */
	public void setMaxCostsPersonal(Double maxCostsPersonal) {
		this.maxCostsPersonal = maxCostsPersonal;
	}

	
	
	public Double getUtilityPrecision() {
		return utilityPrecision;
	}

	public void setUtilityPrecision(Double utilityPrecision) {
		this.utilityPrecision = utilityPrecision;
	}

	@Override
	public String toString() {
		return "Setting [maxFreePortfolioProducts=" + maxFreePortfolioProducts
				+ ", portfolioExtraCostsPerProduct="
				+ portfolioExtraCostsPerProduct + ", startImageForCompanies="
				+ startImageForCompanies + ", interestRate=" + interestRate
				+ ", minimumConsumerUtility=" + minimumConsumerUtility
				+ ", startBudgetForCompanies=" + startBudgetForCompanies
				+ ", factorMarketing=" + factorMarketing + ", factorPersonal="
				+ factorPersonal + ", factorRD=" + factorRD
				+ ", factorMarketShare=" + factorMarketShare
				+ ", preferenceVariance=" + preferenceVariance
				+ ", portfolioFactor=" + portfolioFactor
				+ ", exponentialSmoothingFactor=" + exponentialSmoothingFactor
				+ ", agentAmountCompanyFactor=" + agentAmountCompanyFactor
				+ ", tradeMargin=" + tradeMargin + ", factorCostMarketing="
				+ factorCostMarketing + ", factorCostRD=" + factorCostRD
				+ ", factorCostPersonal=" + factorCostPersonal
				+ ", maxCostsMarketing=" + maxCostsMarketing + ", maxCostsRD="
				+ maxCostsRD + ", maxCostsPersonal=" + maxCostsPersonal
				+ ", factorReportSmall=" + factorReportSmall
				+ ", factorReportMiddle=" + factorReportMiddle
				+ ", factorReportBig=" + factorReportBig + ", factorReportSpy="
				+ factorReportSpy + ", factorLogisticCosts="
				+ factorLogisticCosts + ", factorStartBudget="
				+ factorStartBudget + "]";
	}

}
